package controller;

import dao.ProfessorJpaController;
import dao.UsuarioJpaController;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import dao.exceptions.NonexistentEntityException;
import java.util.Date;
import javax.faces.application.FacesMessage;
import model.Grupo;
import model.Professor;
import model.Usuario;
import pagecontroller.JsfUtil;
import pagecontroller.PageManager;

/**
 *
 * @author Edilson Fernandes da Costa
 * @version 1.0
 */
public class ProfessorController extends Controller {

    public ProfessorController() {
        if (JsfUtil.getObjectFromSession("ProfessorJpaController") == null) {
            jpaController = new ProfessorJpaController();
        } else {
            jpaController = (ProfessorJpaController) JsfUtil.getObjectFromSession("ProfessorJpaController");
        }

    }
    private Professor professor = null;
    private Professor professorAux = null;
    private ProfessorJpaController jpaController = null;
    private UsuarioJpaController usuarioJpaController = null;
    private List<Professor> professors = null;

    public String persiste() {
        if (!valida()) {
            return "refreshPage";
        } else if (professor.getId() == null) {
            return create();
        } else {
            return update();
        }
    }

    public String update() {
        try {
            jpaController.edit(this.professor);
            professorAux = professor;
            this.professor = null;
            JsfUtil.addSuccessMessage("Professor Atualizado com Sucesso");
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ProfessorController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(ProfessorController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "refreshPage";
    }

    public String create() {
        try {

            if (getUsuario().getUsuario().equals("admin")) {
                getUsuario().setGrupo(Grupo.ADMIN);
            } else {
                getUsuario().setGrupo(Grupo.PRFESSOR);
            }
            getUsuarioJpaController().create(getUsuario());
            professor.setDataCadastro(new Date());
            jpaController.create(professor);
            professorAux = professor;
            professor = null;
            JsfUtil.addSuccessMessage("Professor cadastrado com sucesso.");
        } catch (Exception e) {
            JsfUtil.ensureAddErrorMessage(e, "Ocorreu um erro na percistencia dos dados.");
            return null;
        }
        return "refreshPage";
    }

    public String edit() {
        this.professor = (Professor) JsfUtil.getObjectFromRequestParameter("professorTemp");
        getPageManager().setPageProfessorCad();
        return "refreshPage";
    }

    public String editButton() {
        professor = professorAux;
        getPageManager().setPageProfessorCad();
        return "refreshPage";
    }

    public String destroy() {
//        Professor professorTemp = (Professor) JsfUtil.getObjectFromRequestParameter("professorTemp");
        Professor professorTemp = getProfessorAux();
        try {
            jpaController.destroy(professorTemp.getId());
            JsfUtil.addSuccessMessage("Professor removido com sucesso.");
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ProfessorController.class.getName()).log(Level.SEVERE, null, ex);
        }

        return "refreshPage";
    }

    public Professor getProfessor() {
        if (professor == null) {
            professor = new Professor();
        }
        return professor;
    }

    public List<Professor> getProfessors() {
        this.professors = jpaController.findProfessorEntities();
        return this.professors;
    }

    public ProfessorJpaController getJpaController() {
        return jpaController;
    }

    public Professor getProfessorAux() {
        return professorAux;
    }

    public Usuario getUsuario() {
        if (getProfessor().getUsuario() == null) {
            getProfessor().setUsuario(new Usuario());
        }
        return getProfessor().getUsuario();
    }

    public UsuarioJpaController getUsuarioJpaController() {
        if (usuarioJpaController == null) {
            usuarioJpaController = (UsuarioJpaController) JsfUtil.getObjectFromSession("UsuarioJpaController");
        }
        if (usuarioJpaController == null) {
            usuarioJpaController = new UsuarioJpaController();
        }

        return usuarioJpaController;
    }

    public boolean valida() {
        //verificar se o usuário já existe
        Usuario user;
        try {
            user = getUsuarioJpaController().findUsuario(getUsuario().getUsuario());

            //existe esse usuário no sistema

            if (getUsuario().getId() != null && getUsuario().getId() == user.getId()) {
                return true;
            }

            JsfUtil.addErrorMessage("Usuário já cadastrado");
            return false;
        } catch (Exception ex) {
            return true;
        }

    }

    public String load() {
        Professor professorTemp = (Professor) JsfUtil.getObjectFromRequestParameter("professorTemp");
        this.professorAux = professorTemp;
        getPageManager().setPageProfessorRelat();
        return "refreshPage";
    }

    public String loadLogado() {
        this.professorAux = getUsuarioLogado().getProfessor();
        getPageManager().setPageProfessorRelat();
        return "refreshPage";
    }
}
